<?php

/***********************************************/
/*CONTENIDO*/
/***********************************************/
echo" <div class=\"pag_content\">
 	<div class=\"pag_content_title\">
		<div class=\"pag_title_cap\">Cap&iacute;tulo 4: </div>
		<div class=\"pag_title_cont\">Restauraci&oacute;n y recuperaci&oacute;n</div>
    </div>
    <div class=\"pag_content_body\">         
	<div class=\"contenido_principal\">	
		<br />";
		
/***********************************************/
/*TITULO PARTE*/
/***********************************************/

echo"	<div class=\"parrafo_titulo\">
		Backups control files
	</div>";		

	
/***********************************************/
/*CONTENIDO*/
/***********************************************/

echo"
<h3>1. Backup Control Files</h3>
<div class=\"parrafo\" align=\"justify\">
Para asegurar la recuperacion de la base de datos en caso de fallo es necesario que tengamos al dia las copias de seguridad de nuestros control files. Uno de los mecanismos para conseguir esto es configurando RMAN para que haga los backups de forma automatica. Esto se consigue configurando el parametro controlfile autobackup.
</div>
<div class=\"parrafo\" align=\"justify\">
1. Configuramos el parametro de controlfile autobackup
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>>rman
RMAN&GT; connect target
RMAN&GT; connect catalog \"rman_usr/rman_usr@CATALOGO\"
RMAN&GT; configure controlfile autobackup on;

new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
2. Lanzamos un backup total con la nueva configuracion.
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>RMAN&GT; run
{
	backup database;
	backup (archivelog all);
}

.
.
.
Starting Control File and SPFILE Autobackup at 12-MAR-11
piece handle=o1_mf_s_745611566_6qqbrz76_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 12-MAR-11

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
3. Simulamos la perdida de un controlfile
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>> mv control01.ctl control01.ctl_bk

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
4. Forzamos el apagado de la base de datos
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>SQL&gt; shutdown abort

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
5. Al faltar un control file unicamente podemos levantar la base de datos en estado nomount.
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>SQL&gt; startup nomount

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
6. Restauramos el backup que hicimos en el punto 2
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>RMAN&gt; restore controlfile from autobackup;

Starting restore at 12-MAR-11
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=155 devtype=DISK

recovery area destination: /u01/app/oracle/oracle/product/10.2.0/db_2/flash_recovery_area
database name (or database unique name) used for search: ORCL2
channel ORA_DISK_1: autobackup found in the recovery area
channel ORA_DISK_1: autobackup found: o1_mf_s_745611566_6qqbrz76_.bkp
channel ORA_DISK_1: control file restore from autobackup complete
output filename=/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/control01.ctl
output filename=/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/control02.ctl
output filename=/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/control03.ctl
Finished restore at 12-MAR-11

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
7. Montamos la base de datos.
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>SQL&gt; alter database mount;

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
8. Lanzamos el recover
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>SQL&gt; recover databae using backup controlfiles;

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
9. Abrimos la base de datos:
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>SQL&gt; alter database open resetlogs;

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
NOTA: Con la opcion de RESETLOGS le estamos diciendo a Oracle que no aplique ningun tipo de informacion de redo que no se haya hecho en el recovery.
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>SQL&gt; recover database;


</p></pre></blockquote>

<h3>2. Recrear Control Files</h3>
<div class=\"parrafo\" align=\"justify\">
Los control files contienen el mapa fisico de nuestra base de datos. Almacena el path de todos los ficheros, datafiles, redo logs y control files. Tambien almacena informacion de si la base de datos se encuentra en modo archivado y en el caso de no usar catalogo para el RMAN almacena todos los metadatos de las copias de seguridad.
</div>
<div class=\"parrafo\" align=\"justify\">
Oracle ofrece la posibilidad de generar un script que recree los control files.
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>> sqlplus / as sysdba
SQL&gt; ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
Ahora miramos en el directorio UDUMP.
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>> ls -lrt
> cat orcl2_ora_4656.trc

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
Si analizamos un poco el contenido del fichero, vemos entre otras cosas como hace:
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>CREATE CONTROLFILE REUSE DATABASE \"ORCL2\" NORESETLOGS  ARCHIVELOG
	MAXLOGFILES 16
	MAXLOGMEMBERS 3
	MAXDATAFILES 100
	MAXINSTANCES 8
	MAXLOGHISTORY 292
LOGFILE
  GROUP 1 (
	'/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/redo01.log',
	'/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/redo012.log'
  ) SIZE 50M,
  GROUP 2 '/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/redo02.log'  SIZE 50M,
  GROUP 3 '/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/redo03.log'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/system01.dbf',
  '/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/undotbs01.dbf',
  '/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/sysaux01.dbf',
  '/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/users01.dbf',
  '/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/example01.dbf',
  '/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/indices_dbf'
CHARACTER SET WE8ISO8859P1
;

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
Con nuestro backup de los controlfiles vamos a simular la perdida tota de los controlfiles.
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>> rm *.ctl  (en realidad he hecho un mv ;-)

SQL&gt; SELECT * FROM V\$DATAFILE;

ERROR at line 1:
ORA-00210: cannot open the specified control file
ORA-00202: control file:
'/u01/app/oracle/oracle/product/10.2.0/oradata/orcl2/control01.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
Ejecutamos el script de creacion de los control files
</div>
<div class=\"parrafo\" align=\"justify\">
NOTA: seguramente si teniamos la sesion abierta tendremos que hacer un shutdown abort ya que ne la primera parte del script hace STARTUP NOMOUNT.
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>SQL&gt; @/home/oracle/script_controlfile.ctl

</p></pre></blockquote>
<div class=\"parrafo\" align=\"justify\">
NOTA: No os asustais si el script os da algun error. Lo importante es que levante la instancia 
</div>
<blockquote style=\"COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif\">
<pre><p>SQL&gt; startup
Total System Global Area  608174080 bytes
Fixed Size              	1220820 bytes
Variable Size         	197136172 bytes
Database Buffers      	402653184 bytes
Redo Buffers            	7163904 bytes
Database mounted.
Database opened.

</p></pre></blockquote>


";
	
echo"
	</div> 		 
    </div>
    <div class=\"pag_content_footer\">
    </div>
    <div class=\"pag_content_nav\">		
		<div class=\"pag_contenido_left\">
			<a  class=\"cap_next\" href=\"ocp_main.php?cap=4&part=1\">	&lt; Anterior </a>
		 </div>
		<div class=\"pag_contenido_right\" align=\"right\">	
			<a  class=\"cap_next\" href=\"ocp_main.php?cap=4&part=3\">	Siguiente &gt;</a>
		 </div>
	</div>      
</div>
";


?>